import os
from pptx import Presentation
from pptx.util import Inches  # 用于按英寸设置PPT尺寸（PPT默认单位）

# -------------------------- 1. 配置参数（需根据你的需求修改） --------------------------
image_dir = "./final_frames"  # 图片所在目录（相对路径/绝对路径均可，如 "C:/Users/xxx/Pictures"）
output_pptx = "image_background_ppt.pptx"  # 最终输出的PPT文件名（如 "我的图片PPT.pptx"）
supported_formats = [".jpg", ".jpeg", ".png", ".bmp", ".tiff"]  # 支持的图片格式（可自行添加）

# -------------------------- 2. 校验目录与筛选图片 --------------------------
# 检查图片目录是否存在
if not os.path.isdir(image_dir):
    print(f"错误：图片目录 '{image_dir}' 不存在，请检查路径！")
    exit()  # 退出程序

# 筛选目录下的图片文件（忽略大小写，如 .JPG 和 .jpg 都识别）
image_files = []
for filename in os.listdir(image_dir):
    # 获取文件后缀并转为小写，判断是否在支持的格式中
    file_ext = os.path.splitext(filename)[1].lower()
    if file_ext in supported_formats:
        # 拼接完整的图片路径（避免路径错误）
        full_image_path = os.path.join(image_dir, filename)
        image_files.append(full_image_path)

# 检查是否有图片文件
if len(image_files) == 0:
    print(f"提示：目录 '{image_dir}' 下没有支持的图片文件（支持格式：{supported_formats}）")
    exit()

# -------------------------- 3. 创建PPT并插入图片背景 --------------------------
# 1. 初始化空白PPT（默认幻灯片尺寸为 13.33英寸 × 7.5英寸，即 16:9 比例）
prs = Presentation()

# 2. 获取PPT的空白布局（避免默认布局中的标题框遮挡背景）
# （python-pptx 默认布局中，索引5通常是"空白布局"，若找不到则自动创建）
blank_layout = None
for layout in prs.slide_layouts:
    if layout.name == "Blank":  # 匹配"空白布局"的名称
        blank_layout = layout
        break
# 若未找到空白布局（极少情况），则用默认布局并删除占位符
if not blank_layout:
    blank_layout = prs.slide_layouts[0]  # 取第一个默认布局

# 3. 为每张图片创建1页幻灯片，并设置为背景
for img_path in image_files:
    # 创建1页使用空白布局的幻灯片
    slide = prs.slides.add_slide(blank_layout)
    
    # 删除布局中可能存在的占位符（确保背景无遮挡）
    for placeholder in slide.placeholders:
        placeholder.text = ""  # 清空文本（若有）
        # 若占位符是图形框，直接删除（彻底避免遮挡）
        if hasattr(placeholder, "shape"):
            sp = placeholder.shape
            sp.text = ""

    # 插入图片作为全屏背景（尺寸与幻灯片完全一致）
    # left=0, top=0：图片左上角对齐幻灯片左上角
    # width/height：图片宽高等于幻灯片宽高（全屏覆盖）
    slide.shapes.add_picture(
        img_path,
        left=Inches(0),
        top=Inches(0),
        width=prs.slide_width,  # 幻灯片宽度
        height=prs.slide_height  # 幻灯片高度
    )

# -------------------------- 4. 保存PPT --------------------------
prs.save(output_pptx)
print(f"PPT创建成功！共 {len(image_files)} 页，已保存为：{os.path.abspath(output_pptx)}")